home *** CD-ROM | disk | FTP | other *** search
- unit StubExe32U;
-
- {$ifdef Ver90} //Delphi 2.0x
- {$define Delphi2}
- {$endif}
- {$ifdef Ver93} //C++ Builder 1.0x
- {$define Delphi2}
- {$endif}
-
- interface
-
- uses
- SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TForm1 = class(TForm)
- LoadLibBtn: TButton;
- ThreadBtn: TButton;
- FreeLibBtn: TButton;
- procedure LoadLibBtnClick(Sender: TObject);
- procedure ThreadBtnClick(Sender: TObject);
- procedure FreeLibBtnClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- DllLib: THandle;
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.LoadLibBtnClick(Sender: TObject);
- begin
- WriteLn('APP: "Load Library" button pressed');
- DllLib := LoadLibrary('stubdll32.dll');
- if DllLib <> 0 then
- begin
- LoadLibBtn.Enabled := False;
- FreeLibBtn.Enabled := True;
- end
- else
- raise EFOpenError.Create('StubDll32.Dll not found');
- end;
-
- function ThreadProc(Param: Pointer): Integer;
- begin
- WriteLn('APP: Thread started');
- Result := 0;
- WriteLn('APP: Thread stopping');
- end;
-
- procedure TForm1.ThreadBtnClick(Sender: TObject);
- var
- A: DWord;
- begin
- WriteLn('APP: "Create Thread" button pressed');
- BeginThread(nil, 0, ThreadProc, nil, 0, A);
- end;
-
- procedure TForm1.FreeLibBtnClick(Sender: TObject);
- begin
- WriteLn('APP: "Free Library" button pressed');
- if DllLib <> 0 then
- begin
- FreeLibrary(DllLib);
- LoadLibBtn.Enabled := True;
- FreeLibBtn.Enabled := False;
- end;
- end;
-
- var
- OldInitProc, OldExitProc: Pointer;
-
- procedure NewInitProc;
- begin
- if OldInitProc <> nil then
- TProcedure(OldInitProc);
- WriteLn('APP: Entry procedure added via InitProc');
- end;
-
- procedure NewExitProc;
- begin
- ExitProc := OldExitProc;
- WriteLn('APP: Exit procedure added the old fashioned way (ExitProc)');
- end;
-
- procedure NewerExitProc;
- begin
- WriteLn('APP: Exit procedure added with AddExitProc');
- end;
-
- {$ifndef Delphi2}
- function NewTerminateProc: Boolean;
- begin
- Result := True;
- WriteLn('APP: Terminate function added with AddTerminateProc');
- end;
- {$endif}
-
- initialization
- WriteLn('APP: Unit initialisation section');
- OldInitProc := InitProc;
- InitProc := @NewInitProc;
- OldExitProc := ExitProc;
- ExitProc := @NewExitProc;
- AddExitProc(NewerExitProc);
- {$ifndef Delphi2}
- AddTerminateProc(NewTerminateProc)
- {$endif}
- finalization
- WriteLn('APP: Unit finalisation section');
- end.
-